package fr.miage.course7.app.view;

import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.LinkedList;

import javax.imageio.ImageIO;
import javax.swing.JPanel;

/**
 * Classe contenant les éléments à peindre.
 * @author Jean-Yannick TILIN
 * @author Alexandre JAHAN
 *
 */
public class Panneau extends JPanel {

    /**
     * Serial UID.
     */
    private static final long serialVersionUID = 1L;

    /**
     * Liste des elements dessinables.
     */
    private LinkedList<IDrawable> drawables;

    /**
     * Constructeur de la classe, ajoute l'image de fond.
     * @param width largeur de la fenêtre
     * @param height longeur de la fenêtre
     */
    Panneau(final int width, final int height) {
        drawables = new LinkedList<IDrawable>();
        clear();
    }

    /**
     * Méthode qui permet de peindre chaque élément contenu dans la liste chaînée "drawables".
     * @param g conteneur
     */
    public final void paint(final Graphics g) {
        for (Iterator<IDrawable> iter = drawables.iterator(); iter.hasNext();) {
            IDrawable d = (IDrawable) iter.next();
            d.draw(g);
        }
    }

    /**
     * Méthode qui ajoute un objet de type IDrawable dans la liste chaînée.
     * @param d élément de type IDrawable
     */
    public final void addDrawable(final IDrawable d) {
        drawables.add(d);
        repaint();
    }

    /**
     * Méthode qui retire un objet de type IDrawable dans la liste chaînée.
     * @param d élément de type IDrawable
     */
    public final void removeDrawable(final IDrawable d) {
        drawables.remove(d);
        repaint();
    }

    /**
     * Méthode qui vide la liste chaînée.
     */
    public final void clear() {
        final int widthBackground = 950;
        final int heightBackground = 475;

        drawables.clear();

        try {
            BufferedImage img = ImageIO.read(new File("./src/main/resources/mapMonde.jpg"));
            drawables.add(new ImageDrawable(img, 0, 0, widthBackground, heightBackground));

        } catch (IOException e) {
             e.printStackTrace();
        }

        repaint();
    }
}
